/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.Entidades;

import java.io.IOException;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/*
 *  Proyecto eJAM [G12]
 *  Miembros:
 *      - Javier Ruiz Hidalgo
 *      - Adrian Ramos Cápitas
 *      - Miguel Alejandro Esteban Ordóñez
 */
public class TareaRealizadaImpl implements TareaRealizada {

    private Alumno alumno;
    private Tarea tarea;
    private Time duracion;
    private Date f_realizacion;
    private Date f_ini;
    private double nota;
    private List<RespuestaContestada> respuestasContestadas;

    public TareaRealizadaImpl(Alumno alumno, Tarea tarea) {
        this.alumno = alumno;
        this.tarea = tarea;
        this.respuestasContestadas = new ArrayList();
    }

    public TareaRealizadaImpl(Alumno alumno, Tarea tarea, Time duracion, Date f_realizacion, double nota, List<RespuestaContestada> respuestasContestadas) {
        this.alumno = alumno;
        this.tarea = tarea;
        this.duracion = duracion;
        this.f_realizacion = f_realizacion;
        this.f_ini = fIni();
        this.nota = nota;
        this.respuestasContestadas = respuestasContestadas;
    }

    public TareaRealizadaImpl(Alumno alumno, Tarea tarea, Time duracion, Date f_realizacion, double nota) {
        this.alumno = alumno;
        this.tarea = tarea;
        this.duracion = duracion;
        this.f_realizacion = f_realizacion;
        this.f_ini = fIni();
        this.nota = nota;
        this.respuestasContestadas = new ArrayList();
    }

    private Date fIni() {
        Date ini = new Date();
        ini.setTime(f_realizacion.getTime() - duracion.getTime());
        return ini;
    }

    public Date getF_ini() {
        return f_ini;
    }

    public Alumno getAlumno() {
        return alumno;
    }

    public void setAlumno(Alumno alumno) {
        this.alumno = alumno;
    }

    public Time getDuracion() {
        return duracion;
    }

    public void setDuracion(Time duracion) {
        this.duracion = duracion;
    }

    public Date getF_realizacion() {
        return f_realizacion;
    }

    public void setF_realizacion(Date f_realizacion) {
        this.f_realizacion = f_realizacion;
    }

    public double getNota() {
        return nota;
    }

    public void setNota(double nota) {
        if (nota < 0) {
            this.nota = 0;
        } else {
            this.nota = nota;
        }
    }

    public Tarea getTarea() {
        return tarea;
    }

    public void setTarea(Tarea tarea) {
        this.tarea = tarea;
    }

    public List<RespuestaContestada> getRespuestasContestadas() {
        return respuestasContestadas;
    }

    public void setRespuestasContestadas(List<RespuestaContestada> respuestasContestadas) {
        this.respuestasContestadas = respuestasContestadas;
    }

    public void addRespuestaContestada(RespuestaContestada respuestaContestada) {
        this.respuestasContestadas.add(respuestaContestada);
    }

    public void removeRespuestaContestada(RespuestaContestada respuestaContestada) {
        this.respuestasContestadas.remove(respuestaContestada);
    }

    public void corregirTareaEvaluable() {
        int rCorrectas = 0, rErroneas = 0, j = 0;
        boolean enc = false;

        if (respuestasContestadas.size() > 0) {
            for (RespuestaContestada rc : respuestasContestadas) {
                while (j < tarea.getPreguntas().size() && !enc) {
                    if (rc.getPregunta().getNumP() == tarea.getPreguntas().get(j).getNumP()) {
                        if (rc.getRespuesta() != null) {
                            if (rc.getRespuesta().getNumR() == tarea.getPreguntas().get(j).getrCorrecta()) {
                                rCorrectas++;
                            }
                            else {
                                rErroneas++;
                            }

                            enc = true;
                        }
                        else {
                            rErroneas++;
                            enc = true;
                        }
                    }
                    else {
                        j++;
                    }
                }
                enc = false;
            }

            setNota((rCorrectas - (rErroneas * tarea.getC_error())) / (respuestasContestadas.size() / 10.0));
        }
        else {
            setNota(0);
        }
    }

    public String toString() {
        int i = 0;
        String s = "[" + tarea.getNombre() + "] " + alumno.getDNI() + "\nF.Inicio: " + f_ini.toString() + " -- F.Fin: " + getF_realizacion().toString() + "\n\tDuracion: " + getDuracion().toString() + "\tNota: " + getNota();

        for (Pregunta p : tarea.getPreguntas()) {
            s += "\n" + p.toString() + "\n Contestada: " + respuestasContestadas.get(i).getRespuesta().getNumR() + " - Correcta: " + p.getrCorrecta();
            i++;
        }

        return s;
    }
}
